// import Promise from "./promise-3.js";

import fs from "fs"; // node中的文件系统模块
import { dirname, resolve } from "path";
import { fileURLToPath } from "url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

// 错误优先
// fs.readFile(resolve(__dirname, "fileUrl.txt"), "utf8", function (err, data) {
//   // 上一个异步方法的输出是下一个人输入
//   fs.readFile(resolve(__dirname, data), "utf8", function (err, data) {
//     console.log(data);
//   });
// });

// 用promise 需要把之前的异步的回调api先转化成promise
import Promise from "./promise-3.js";
function readFile(url) {
  return new Promise((resolve, reject) => {
    fs.readFile(url, "utf8", function (err, data) {
      if (err) return reject(err);
      resolve(data);
    });
  });
}
let promise2 = new Promise((resolve, reject) => {
  resolve("ok");
}).then(
  (data) => {
    return data; // x promise2.resolve / promise2.reject
  },
  () => {
    return "abc"; // x
  }
);
promise2.then(
  (value) => {
    console.log(value, "成功");
  },
  (reason) => {
    console.log(reason, "失败");
  }
);

// 采用promise 将逻辑改成链式调用
// promise 调用then之后可以继续调用then

// then方法中传递的回调函数是有返回值的 ，可以用这个返回值决定下一次then的结果
// 返回值有两类
// 1）。返回是一个promise, 如果返回的promise是成功的则会将结果传递给下一次then的成功，如果是失败也是传递下一次thenn的失败
// 2) 。返回的不是一个promise， 不是报错就可以传递给下一次then的成功
// 3) 。then中抛出异常 会执行到下一次then的失败。

// ? 什么情况会走到then的失败  抛错 ， 返回的是一个失败的promise. 其他均走下一次then的成功
